﻿using System;
using System.Text;
using System.Drawing;
using System.Buffers;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;

public static partial class glDRIVE
{
    /*
    函数 gl.lluu
    矩阵的三角分解
    参数 a: a[n][n]存放n阶矩阵A。返回时存放Q矩阵。
    参数 n: 
    参数 l: l[n][n]返回时存放下三角矩阵L。
    参数 u: u[n][n]返回时存放上三角矩阵U。
    返回值 若为0，则表示失败；若不为0，则表示正常。
    */

    public static string drive_lluu()
    {
        int i, j;
        double[,] l = new double[4, 4];
        double[,] u = new double[4, 4];
        double[,] q = new double[4, 4];
        double[,] a = new double[4, 4] {
            {2.0,4.0,4.0,2.0},
            {3.0,3.0,12.0,6.0},
            {2.0,4.0,-1.0,2.0},
            {4.0,2.0,1.0,1.0}
        };

        int n = 4;
        string rs = "";
        rs += gl.html_table("MAT A:", a);

        for (i = 0; i < n; i++)
            for (j = 0; j < n; j++) q[i, j] = a[i, j];

        i = gl.lluu(q, n, l, u);
        if (i <= 0) return "error:0";

        rs += gl.html_table("MAT Q=L+U-I:", q);
        rs += gl.html_table("MAT L:", l);
        rs += gl.html_table("MAT U:", u);

        return rs;
    }
}